|  
                        
                        
                        
                       
                        
                         在SQL Server中,存储过程是比视图更强大。视图让我们简单地做一个SELECT查询也在可视图本身,它的工作方式是用于运行复杂的查询。 但视图并不姝真正为我们提供代码业务逻辑的能力。例如,视图不会能让我们增加条件代码(如IF语句)。幸运的是存储过程可能使用。 
                        什么是存储过程? 
                        存储过程是一组SQL语句编译成一个SQL。类似于在说的SQL脚本页面,在这里可以运行许多SQL脚本合为一个整体。 
                        然而,存储过程并不仅仅是一个长脚本。这是已保存在SQL Server中明确在存储过程节点的脚本。存储过程通常包含一些业务逻辑。例如,一个存储过程可以接受被传递给它的并针对这些参数测试使用IF语句的参数。例如,如果该参数是一个值,这样做,如果它是另一个值。 
                        它们包含业务逻辑的能力使存储过程SQL Server的强大的一部分。存储过程可以提高性能的应用程序,因为存储过程进行解析,并尽快,因为它是建立优化,然后存储在内存中。运行通过存储过程条件的查询可以是非常快 - 相比,发送查询通过网络,到SQL Server的应用程序,遂将全部返还给它在网络上,因此它可以过滤通过它,并挑选出只是它感兴趣的记录数据。 
                        存储过程的好处 
                        下面是一些在使用存储过程的主要优点: 
                         
                        创建一个存储过程 
                        要创建一个存储过程,需要使用CREATE PROCEDURE语句,其次是弥补了存储过程的代码。如果存储过程将要接受参数,它们需要被包括在名称后。 
                       
                          
                            CREATE PROCEDURE myStoredProcedure AS ... 
                              OR 
                              CREATE PROCEDURE myStoredProcedure @{Parameter Name} {data type} AS 
                                ...  | 
                           
                         
                        
                        示例 
                        下面的代码创建一个存储过程被称为“LatestTasks”。它接受一个参数名为@Count.当调用这个存储过程,通过@count参数,它决定你想要多少行返回。下面的代码: 
                        
                          
                            CREATE PROCEDURE LatestTasks @Count int AS SET ROWCOUNT @Count SELECT TaskName AS LatestTasks, DateCreated FROM Tasks ORDER BY DateCreated DESC  | 
                           
                         
                        运行这段代码在SQL Server管理套件,会看到它被在存储过程节点创建为“LatestTasks”。 
                          
                        
                          在SQL Server2014,可以在存储过程节点/文件夹中创建通过右键单击一个存储过程,选择存储过程....这将打开一个模板,这是随时可以填入自己的具体程序。 
                        
                        执行存储过程 
                        现在,已经创建了存储过程,要执行它的任何时间,需要使用调用它要么执行或EXEC。如果存储过程的参数要求提供这些程序名在后面。像这样: 
                        
                          
                            EXECUTE LatestTasks  EXEC LatestTasks 
                              EXEC LatestTasks @Count = 5  | 
                           
                         
                        示例 
                        在下面的例子中,我们在同一时间执行存储过程两次。我们第一次调用它,我们通过@Count传递为3,第二次传递的值为5。 
                        该截图显示,通过传递参数(和值),存储过程返回结果的基础上提供值。顶端结果集返回3行,因为我们通过值3。第二个结果集返回5行,因为我们提供一个值5: 
                          
                        使用GUI 
                        还可以使用图形用户界面来执行存储过程。 
                        具体方法如下: 
                        
                          - 使用对象资源管理器,浏览到存储过程
 
                          - 右键单击该存储过程并选择Execute Stored Procedure...:
                               
 
  
                          - 会出现一个对话框。输入您所选择的参数值:
                               
 
  
                          - 点击OK
 
                          - SQL Server现在会生成SQL代码并执行存储过程。
 
                         
                        修改存储过程 
                        如果需要修改现有的存储过程,只需更换CREATE使用ALTER。让我们添加一个空格之间“Latest”和“Tasks”(即“Latest Tasks”),并添加描述字段: 
                         
                          
                            ALTER PROCEDURE LatestTasks @Count int AS SET ROWCOUNT @Count SELECT TaskName AS "Latest Tasks", Description, DateCreated FROM Tasks ORDER BY DateCreated DESC  | 
                           
                         
                        系统存储过程 
                        SQL Server包含了大量的系统存储过程,以帮助数据库管理任务。可以通过GUI执行的任务可以通过系统存储过程来完成。 例如,有些东西可以用系统存储过程的包括: 
                        
                          - 配置安全帐户
 
                          - 建立链接服务器
 
                          - 创建一个数据库维护计划
 
                          - 创建全文检索目录
 
                          - 添加远程登录
 
                          - 配置复制
 
                          - 设置调度作业
 
                          - 以及更多...
 
                         
                        命名约定 
                        扩展系统存储过程节点,一起来看看。会发现,他们的名字都开始以sp_,表明它是一个存储过程。该系统存储过程显然遵循的命名约定。 
                        这是一个好主意,制定一个一致的命名约定存储过程(并为数据库中的所有其他对象)。 
                        有些人前缀的存储过程usp_,另外其他人使用SQL关键字,如SELECT,INSERT,UPDATE,DELETE。其他人使用的缩写应用。 
                        一些使用下划线的存储过程(例如,latest_tasks)在单独的单词,而其他人将使用标题的情况下(例如,LatestTasks)。 
                        因此,这是可能的,我们的存储过程可以被命名为以下任意一种,这取决于命名约定的使用。 
                        
                          - LatestTasks
 
                          - latest_tasks
 
                          - uspLatestTasks
 
                          - usp_latest_tasks
 
                          - selectLatestTasks
 
                          - select_LatestTasks
 
                          - select_latest_tasks
 
                          - getLatestTasks
 
                          - get_latest_tasks
 
                         
                        最重要的是一致性。选择一个,并坚持下去。它会更容易,当你需要使用存储过程。 想象一下,有几十,甚至上百的存储程序,每一次执行一次,需要找到它在对象资源管理器,是否把它称为usp_LatestTasks或uspLatestTasks。 
                        所以这是存储过程覆盖。接下来,我们了解用户登录。 
                          
                       |